
/**
 * Project Name:cats-core
 * File Name:UserService.java
 * Package Name:com.catsic.core.user.service
 * Date:2014年2月27日上午11:18:05
 * Copyright (c) 2014, oa.catsic.com All Rights Reserved.
 */
 
package com.catsic.core.user.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.core.userdetails.UserDetailsService;

import com.catsic.base.BaseService;
import com.catsic.core.conditon.UserCondition;
import com.catsic.core.entity.User;
import com.catsic.core.form.RoleForm;
import com.catsic.core.form.UserForm;

/**
 * ClassName: UserService
 * Description: 用户Service接口类
 * date: 2014年2月27日 上午11:18:05
 * author: yangyd
 */
public interface UserService extends BaseService<User,String>,UserDetailsService{
	
	/**
	 * add:添加
	 * @author yangyd
	 * @param form
	 */
	public UserForm add(UserForm form);

	/**
	 * update:更新
	 * @author yangyd
	 * @param form
	 */
	public UserForm update(UserForm form);
	
	/**
	 * findById:通过ID获得用户
	 * @author yangyd
	 * @param id
	 * @return User
	 */
	public User findById(String id);
	
	/**
	 * findUserById:通过ID获得用户
	 * @author yangyd
	 * @param id
	 * @return User
	 */
	public UserForm findUserById(String id);
	
	/**
	 * findRoleById:通过用户ID获取用户对应的角色
	 * @author yangyudi
	 * @param id
	 * @return
	 */
	public List<RoleForm> findRoleById(String id);
	
	/**
	 * freeze:冻结用户
	 * @author yangyd
	 * @param id
	 */
	public void freeze(String id);
	
	/**
	 * cancel:注销用户
	 * @author yangyd
	 * @param id
	 */
	public void cancel(String id);
	
	/**
	 * activite:激活用户
	 * @author yangyd
	 * @param id
	 */
	public void activite(String id);
	
	/**
	 * bind:授权
	 * @param id 用户主键
	 * @param roleIds 角色主键数组
	 */
	public void bind(String id,String roleIds[]);
	
	/**
	 * checkUserName:检查用户名是否存在
	 * @author yangyd
	 * @param username
	 */
	public void checkUserName(String username);
	
	/**
	 * 初始密码，12345qwert
	 * @param id
	 * @param newPassword
	 * @return
	 */
	public void initPassword(String id,String newPassword);
	
	/**
	 * 初始密码，12345qwert
	 * @param newPassword
 	 * @param organCode
	 * @return
	 */
	public void initAllPassword(String organCode,String newPassword);
	
	/**
	 * hasSameUserName:检测用户名是否重复 true存在、否则不存在
	 * @author yangyd
	 * @param username
	 * @return boolean
	 */
	public boolean hasSameUserName(String username);
	
	/**
	 * checkPassword:检测密码长度，密码长度必须{8}-{16}位，true是，false否
	 * @author yangyd
	 * @param password
	 * @return boolean
	 */
	public boolean checkPassword(String password);
	
	/**
	 * changePassword:修改密码
	 * @author yangyd
	 * @param username    用户名
	 * @param oldPassword 原密码
	 * @param newPassword 新密码
	 */
	public void changePassword(String username,String oldPassword,String newPassword);
	
	/**
	 * findAll:分页动态条件查询
	 * @author yangyd
	 * @param condition
	 * @param pageable
	 * @return
	 */
	public Page<UserForm> findAll(UserCondition condition, Pageable pageable);
	
	 /**
	 * validatePassword:校验用户名密码
	 * @author yangyudi
	 * @param username
	 * @param password
	 * @param saltsPassword
	 * @return 成功返回true，否则false
	 */
	public boolean validatePassword(String username,String password,String saltsPassword);
	
	/**
	 * findByUsername:通过用户名查找用户
	 * @author yangyd
	 * @param username
	 * @return User
	 */
	public User findByUsername(String username);
	
	/**
	 * findByIdentity:通过身份证获取用户
	 * @author yangyudi
	 * @param identity
	 * @return
	 */
	public User findByIdentity(String identity);
	
	/**
	 * 验证账户是否被锁定
	 * @param username
	 */
	public void validateUserUnLock(String username);
	
	/**
	 * 登录成功后，重置失败次数为0
	 * @param username
	 */
	public void resetFailureCount(String username);
	
	/**
	 * 登录失败后，失败次数加1
	 * @param username
	 */
	public Integer[] updateFailureCount(String username);
	
	/**
	 * 获取该机构下所有用户
	 * @param organCode
	 * @return
	 */
	public List<User> findByLikeOrganCode(String organCode);
}
